package org.aiforum.backend.common;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 缓存上下文
 * @author VIC
 *
 */
public class CacheContext {
	
	private CacheContext(){}
	
	/**缓存容器*/
	private static Map<String,CacheObject> cache = Collections.synchronizedMap(new HashMap<String,CacheObject>());
	
	/**
	 * 如果存在缓存
	 * @param key
	 * @return
	 */
	public static boolean containsCache(String key){
		return cache.containsKey(key);
	}
	
	/**
	 * 设置缓存
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 */
	public static boolean setCache(String key,Object value,long timeout){
		// 新建缓存对象
		CacheObject cacheObject = new CacheObject(value,timeout);
		// 添加缓存
		cache.put(key, cacheObject);
		Set<String> keys=cache.keySet();
		return true;
	}
	
	/**
	 * 获取缓存
	 * @param key
	 * @param clz
	 * @return
	 */
	public static <T> T getCache(String key,Class<T> clz){
		Set<String> keys=cache.keySet();
		// 如果缓存存在
		if(cache.containsKey(key)){
			// 获取缓存对象
			CacheObject cacheObject = cache.get(key);
			// 检查缓存是否有效
			long currentTime = System.currentTimeMillis();
			long timeout = cacheObject.getTimeout();
			// 如果当前时间大于缓存时间则缓存失效
			if(currentTime > timeout){
				// 移除过期缓存数据
				delCache(key);
				return null;
			}
			return (T)cacheObject.getData();
		}
		return null;
	}
	
	/**
	 * 输出缓存
	 * @param key
	 * @return
	 */
	public static boolean delCache(String key){
		cache.remove(key);
		return true;
	}

}
